home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / clipper / nfsrc21.zip / AEMAXLEN.PRG < prev    next >
Text File  |  1991-08-15  |  4KB  |  139 lines

  1. /*
  2.  * File......: AEmaxlen.prg
  3.  * Author....: Ralph Oliver,  TRANSCOM SYSTEMS
  4.  * CIS ID....: 74030,703
  5.  * Date......: $Date:   15 Aug 1991 23:05:38  $
  6.  * Revision..: $Revision:   1.1  $
  7.  * Log file..: $Logfile:   E:/nanfor/src/aemaxlen.prv  $
  8.  * 
  9.  * This is an original work by Ralph Oliver and is placed in the
  10.  * public domain.
  11.  *
  12.  * Modification history:
  13.  * ---------------------
  14.  *
  15.  * $Log:   E:/nanfor/src/aemaxlen.prv  $
  16.  * 
  17.  *    Rev 1.1   15 Aug 1991 23:05:38   GLENN
  18.  * Forest Belt proofread/edited/cleaned up doc
  19.  * 
  20.  *    Rev 1.0   07 Jun 1991 23:03:12   GLENN
  21.  * Initial revision.
  22.  *
  23.  *
  24.  */
  25.  
  26.  
  27. /*  $DOC$
  28.  *  $FUNCNAME$
  29.  *     FT_AEMAXLEN()
  30.  *  $CATEGORY$
  31.  *     Array
  32.  *  $ONELINER$
  33.  *     Find longest element within an array
  34.  *  $SYNTAX$
  35.  *     FT_AEMAXLEN( <aArray> [, <nDimension> [, <nStart> [, <nCount> ] ] ] ) ;
  36.  *                -> nMaxlen
  37.  *  $ARGUMENTS$
  38.  *     <aArray> is the array containing the elements to be measured.
  39.  *
  40.  *     <nDimension> is the array dimension to be measured,
  41.  *                defaults to first dimension.
  42.  *
  43.  *     <nStart> is the starting array element to include,
  44.  *                defaults to first array element.
  45.  *
  46.  *     <nCount> is the number of array elements to process from
  47.  *                from <nStart>, defaults to remaining elements
  48.  *                in array.
  49.  *  $RETURNS$
  50.  *     The length of the longest size element of an array.
  51.  *  $DESCRIPTION$
  52.  *     This function will measure each element of an array
  53.  *     dimension and return the longest element.
  54.  *  $EXAMPLES$
  55.  *     FT_AEMAXLEN(aArray)       // Measure the 1st dimension of an Array
  56.  *
  57.  *     FT_AEMAXLEN(aArray,2)     // Measure the 2nd dimension of an Array
  58.  *
  59.  *     FT_AEMAXLEN(aArray,2,,9)  // Measure Elements 1-9 of the
  60.  *                                     2nd dimension or subarray
  61.  *
  62.  *     FT_AEMAXLEN(aArray,3,5,9) // Measure Elements 5-9 of the
  63.  *                                     3rd dimension or subarray
  64.  *
  65.  *     FT_AEMAXLEN(aArray,3,5)   // Measure Elements 5 to last in the
  66.  *                                     3rd dimension or subarray
  67.  *  $SEEALSO$
  68.  *     FT_AEMINLEN()
  69.  *  $END$
  70.  */
  71.                    
  72. #ifdef FT_TEST
  73.                   
  74. FUNCTION MAIN()
  75.    LOCAL var0, myarray1 := DIRECTORY()
  76.    CLS
  77.    ? "TEST TO DEMONSTRATE EXAMPLES OF FT_AEMAXLEN"
  78.    ?
  79.    ? "myarray1 = DIRECTORY()"
  80.    ?
  81.    var0 := FT_AEMAXLEN( myarray1 )
  82.    ? PADR('FT_AEMAXLEN( myarray1 ) ->',30)
  83.    ?? var0
  84.    ?
  85.    var0 := FT_AEMAXLEN( myarray1,2 )
  86.    ? PADR('FT_AEMAXLEN( myarray1,2 ) ->',30)
  87.    ?? var0
  88.    ?
  89.    var0 := FT_AEMAXLEN( myarray1,3 )
  90.    ? PADR('FT_AEMAXLEN( myarray1,3 ) ->',30)
  91.    ?? var0
  92.    ?
  93.    var0 := FT_AEMAXLEN( aTail( myarray1 ) )
  94.    ? PADR('FT_AEMAXLEN( aTail( myarray1 ) ) ->',30)
  95.    ?? var0
  96.    ?
  97.    RETURN NIL
  98.  
  99. #endif
  100.  
  101.  
  102. FUNCTION FT_AEmaxlen( aArray, nDimension, nStart, nCount )
  103.  
  104.    LOCAL i, nLast, cType, nMaxlen := 0
  105.  
  106.    // Set default parameters as necessary.
  107.    IF nDimension == NIL
  108.       nDimension := 1
  109.    ENDIF
  110.  
  111.    IF nStart == NIL
  112.       nStart := 1
  113.    ENDIF
  114.  
  115.    IF nCount == NIL
  116.       nCount := LEN( aArray ) - nStart + 1
  117.    ENDIF
  118.  
  119.    nLast := MIN( nStart +nCount -1, LEN( aArray ))
  120.  
  121.    FOR i := nStart TO nLast
  122.       cType := VALTYPE( aArray[i] )
  123.       DO CASE
  124.          CASE ( cType == "C" )
  125.             nMaxlen := MAX( nMaxlen, LEN( aArray[i] ))
  126.  
  127.          CASE ( cType == "A" )
  128.             nMaxlen := MAX( nMaxlen, ;
  129.                LEN( LTRIM( TRANSFORM( aArray[i] [nDimension], "@X"))))
  130.  
  131.          OTHERWISE
  132.             nMaxlen := MAX( nMaxlen, ;
  133.                LEN( LTRIM( TRANSFORM( aArray[i], "@X" ))))
  134.       ENDCASE
  135.    NEXT
  136.  
  137.    RETURN ( nMaxlen )
  138.  
  139.